CodePipeline Githubにコミットしたら自動的にデプロイするまでの道のり①

AWS

えー、AWSのCodePipelineというものに取り組んでおります。
が、AWS初心者が始めて、超簡単なWebページをGithubにコミットからサーバーにデプロイできるようになるまで、丸2日かかりました。
あまり日本語情報がなかったのとかも関係していますが…。2017年6月27日現在、まだ新しいサービスなんですね。。(´・ω・`)

で、作る方法は公式サイトなどにありますから、途中で引っかかったポイントを書いておきます。

公式サイトは↓
http://transporter-guild.com/wp/2017/04/25/8/

CodePipeline自体は実に簡単に作れます。

Githubからやる場合は、下記のサイトを参考に作ります。
http://docs.aws.amazon.com/ja_jp/codepipeline/latest/userguide/tutorials-four-stage-pipeline.html

超簡単な構成は、次の通りです。
codepipeline1.png

Sourceを取ってきて、Buildして、Stagingにあげる、というここまでやります。

まず最初に、アーティファクトがないよ、的なメッセージが出ます。

…あーてぃふぁくと??

聞きなれないですね~
ググると遊戯王 Wikiとか出てきます。
あ、いかんいかん、今日も
「Gさんはいつも遊戯王の話をしている」
と怒られたばかりだった…。。(´・ω・`) (ちなみにいつも遊戯王の話はしていない)

とりあえず、成果物、とかいう意味らしいです。

まずは、CodePipelineのアーティファクトを指定するところで、

 Source

のアーティファクトが

 Build

の入力になり、Buildのアーティファクト(出力)が

 Staging

の入力になるようにします。

ちなみに、出力されたアーティファクトはS3の中にどんどんたまっていきます。過去の成果物を取っておいてくれるわけですね~

今度はCloudWatch→ログのCodebuildの中に

 code pipeline No artifact files specified

と出るようになります。

これはbuildspec.ymlにartifactsの記述がないからです。
buildspec.ymlを下記のように変更したら治りました。
buildspec.ymlはルートに置いておかないといけません。

 
 version: 0.2
 
 phases:
  install:
    commands:
      - echo Nothing to do in the install phase...
 
  pre_build:
    commands:
      - echo Nothing to do in the pre_build phase...
 
  build:
    commands:
      - echo Build started on `date`
 
  post_build:
    commands:
      - echo Build completed on `date`
 
 artifacts:
  files:
    - '**/*'

ついでに、ルートに置いておくファイルでappspec.ymlも必要なのですが、ついでに内容を張っておきます。

 version: 0.0
 os: linux
 files:
  - source: /
    destination: /var/www/html/
 hooks:
  BeforeInstall:
    - location: scripts/start_server
      timeout: 300
      runas: root
  ApplicationStop:
    - location: scripts/stop_server
      timeout: 300
      runas: root

で、本当はBlue/Greenでやりたかったのですが、どうもわからないことが多いので、より簡単そうなインプレイスのデプロイ方法に変更します。
対象のインスタンスを、タグで指定します。

CodePipelineののStagingにデプロイをするのはAWS CodeDeployが行います。
CodeDeployがなかなか難しい。
まずはCodeDeployを単体でやっておいたほうがいいでしょう。

下記が公式
https://aws.amazon.com/jp/codedeploy/

つまったらこのページ見ると早いです。
Troubleshoot Instance Issues

私が詰まったのは

  • AWS CodeDeploy agent をインストールしなくてはいけない。
  • 443番ポートを利用するのであけておかないといけない。
  • IAMのインスタンスプロファイルをインスタンスに追加しないといけない。

http://docs.aws.amazon.com/ja_jp/codedeploy/latest/userguide/getting-started-create-iam-instance-profile.html

の3点ですね。
AWS CodeDeploy agentをインストールすると、

 /var/log/aws/codedeploy-agent/

にログも出るので、わかりやすいです。

上記3点をクリアすると

 com.amazonaws.services.simpleworkflow.flow.ActivityTaskFailedException: 
 EC2 instance ******* is not in the same VPC as ELB. 

というエラーがイベントのログとして表示されます。

CodeDeployのアプリケーションで登録したロードバランサーのVPCとインスタンスのVPCは同じでないといけません。

上記をクリアして、やっとできました!

まだまだ、俺たちの戦いは始まったばかりだ!
という感じですが。

続きはこちら↓
CodePipeline Githubにコミットしてテスト環境で確認の後デプロイする

カテゴリーAWS

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です